import axios from "axios";
import qs from "qs";
import { Notification, MessageBox } from 'element-ui';

let baseURL = 'https://bishe.my2171.com';
// let baseURL = 'http://127.0.0.1:8081';
axios.defaults.baseURL = baseURL;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

/**
 * 发起网络请求
 * @param { string } url 地址
 * @param { object } data 数据
 * @param { boolean } isHandle 是否处理 502
 * @returns 
 */
const request = (url, data) => new Promise((t, f) => {
    axios.post(url, qs.stringify(data)).then(res => {
        t(res);
    }).catch(ref => {
        f(ref)
    })
})

/**
 * 消息通知
 * @param {string} type 类型，可选值：成功-success 失败-error 警告-warning 信息-info
 * @param {string} title 标题
 * @param {string} message 内容
 * @param {number} duration 保留时常（毫秒）
*/
const notif = (type, title, message, duration = 3000) => {
    Notification({ type, title, message, duration });
}

/**
 * 处理请求结果
 * @param {*} res 结果集
 * @param {*} successText 成功提示文案
 */
const handleResult = (res, successText) => new Promise((t, f) => {
    let { code, msg } = res.data;
    if (code == 200) {
        notif('success', '成功', successText);
        t();
    }
    else notif('error', '失败', msg);
})

/**
 * 消息确认框
 * @param {*} title 标题
 * @param {*} content 内容
 * @param {*} type 类型
 * @param {*} showCancelButton 是否显示取消按钮
 */
const confirm = (title, content, type = 'warning', showCancelButton = true) => new Promise((t, f) => {
    MessageBox.confirm(content, title, {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type, showCancelButton
    }).then(() => { t(true) }, () => { t(false) });
})

/**
 * 弹出输入框
 * @param {*} title 标题
 * @param {*} input_title 输入提示
 * @param {*} inputValue 默认文本
 * @param {*} inputPattern 正则表达式
 * @param {*} inputErrorMessage 格式错误提示文本
 */
const prompt = (title, input_title, inputValue, inputPattern, inputErrorMessage) => new Promise((t, f) => {
    MessageBox.prompt(input_title,title, {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        inputValue,inputPattern,inputErrorMessage
    }).then(({ value }) => {
        t(value);
    }).catch();
})

/**
 * 生成随机正整数
 * @param {*} min 最小值
 * @param {*} max 最大值（不含）
 */
const random = (min = 0,max = 10) => {
    return parseInt(Math.random() * (max - min) + min);
}

export default {
    request,
    notif,
    handleResult,
    confirm,
    prompt,
    random,
}